package com.demo.security.access.audit.prepost;

import org.aopalliance.intercept.MethodInvocation;
import org.springframework.aop.framework.AopInfrastructureBean;
import org.springframework.security.core.Authentication;

/**
 * 前置-后置方法调用的审计处理对象
 * 
 * @author ryuu.kk
 */
public interface PrePostInvocationAuditAdvice extends AopInfrastructureBean {
	
	/**
	 * 目标方法调用前处理
	 * @param authentication 权限
	 * @param mi 方法调用
	 * @param preAuditAttribute 前置审计配置属性
	 */
	void before(Authentication authentication, MethodInvocation mi, PreAuditAttribute preAuditAttribute);
	
	/**
	 * 目标方法调用后的处理
	 * @param authentication 权限
	 * @param mi 方法调用
	 * @param preAuditAttribute 后置审计配置属性
	 * @param returnObject 返回结果
	 * @param Object 执行后返回结果,如果不需要修改方法的返回结果,则可直接将参数的returnObject返回
	 */
	Object after(Authentication authentication, MethodInvocation mi, PostAuditAttribute postAuditAttribute, Object returnObject);
}